# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.File.V1.Model.PerformanceConfig do
  @moduledoc """
  Used for setting the performance configuration. If the user doesn't specify PerformanceConfig, automatically provision the default performance settings as described in https://cloud.google.com/filestore/docs/performance. Larger instances will be linearly set to more IOPS. If the instance's capacity is increased or decreased, its performance will be automatically adjusted upwards or downwards accordingly (respectively).

  ## Attributes

  *   `fixedIops` (*type:* `GoogleApi.File.V1.Model.FixedIOPS.t`, *default:* `nil`) - Choose a fixed provisioned IOPS value for the instance, which will remain constant regardless of instance capacity. Value must be a multiple of 1000. If the chosen value is outside the supported range for the instance's capacity during instance creation, instance creation will fail with an `InvalidArgument` error. Similarly, if an instance capacity update would result in a value outside the supported range, the update will fail with an `InvalidArgument` error.
  *   `iopsPerTb` (*type:* `GoogleApi.File.V1.Model.IOPSPerTB.t`, *default:* `nil`) - Provision IOPS dynamically based on the capacity of the instance. Provisioned read IOPS will be calculated by multiplying the capacity of the instance in TiB by the `iops_per_tb` value. For example, for a 2 TiB instance with an `iops_per_tb` value of 17000 the provisioned read IOPS will be 34000. If the calculated value is outside the supported range for the instance's capacity during instance creation, instance creation will fail with an `InvalidArgument` error. Similarly, if an instance capacity update would result in a value outside the supported range, the update will fail with an `InvalidArgument` error.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :fixedIops => GoogleApi.File.V1.Model.FixedIOPS.t() | nil,
          :iopsPerTb => GoogleApi.File.V1.Model.IOPSPerTB.t() | nil
        }

  field(:fixedIops, as: GoogleApi.File.V1.Model.FixedIOPS)
  field(:iopsPerTb, as: GoogleApi.File.V1.Model.IOPSPerTB)
end

defimpl Poison.Decoder, for: GoogleApi.File.V1.Model.PerformanceConfig do
  def decode(value, options) do
    GoogleApi.File.V1.Model.PerformanceConfig.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.File.V1.Model.PerformanceConfig do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
